package com.baitengsoft.patentservicemonitor.job.model;

import com.baitengsoft.patentservicemonitor.job.utils.CloudUtils;
import com.baitengsoft.patentservicemonitor.job.utils.GetPatenteeType;
import org.apache.commons.lang.StringUtils;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;


/**
 * @author kennygu
 * @email 89335272@qq.com
 * @date 2018-01-08 14:00:04
 */
public class PacPatentinfoModel implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * 主键
     */
    private Integer id;
    /**
     * 所属平台ID
     */
    private Integer platformid;

    /**
     * 专利号
     */
    private String an;


    /**
     * 专利名称
     */
    private String ti;

    /**
     * 专利类型
     */
    private Integer clazz;

    /**
     * 法律状态
     */
    private String lsnt;

    /**
     * 专利申请日
     */
    private String ad;

    /**
     * 专利授权日
     */
    private String apd;
    /**
     * 专利公开日
     */
    private String pd;
    /**
     * 专利失效日
     */
    private Object ivd;
    /**
     * 代理机构名称
     */
    private String cagc;

    /**
     * 发明人
     */
    private String in1;

    /**
     * 专利申请人(权利人)
     */
    private String pa1;

    /**
     * 变更后，最后一次专利申请人(权利人)
     */
    private String cpa1;
    /**
     * 变更前第一专利申请/权利人
     */
    private String ppa1;

    /**
     * 转让日期日
     */
    private Object tfd;
    /**
     * 实审日期
     */
    private String sed;

    /**
     * IPC分类
     */
    private String ic1;

    /**
     * 失效原因
     */
    private String lsn2;

    /**
     * 专利地址----权利人地址---上一个权利人地址
     */
    private String paa;

    /**
     * 专利地址  aa caa cdn 应该是一样的
     */
    private String aa;

    /**
     * 变更后，最后一次专利地址---当前权利人地址
     */
    private String caa;
    /**
     * 当前地址
     */
    private String cdn;
    /**
     * 转移前地址
     */
    private String pdn;

    /**
     * 专利名称
     */
    private String patentTypeName;


    /**
     * 设置：主键(内)
     */
    public void setId(Integer id) {
        this.id = id;
    }

    /**
     * 获取：主键(内)
     */
    public Integer getId() {
        return id;
    }

    /**
     * 设置：所属平台ID
     */
    public void setPlatformid(Integer platformid) {
        this.platformid = platformid;
    }

    /**
     * 获取：所属平台ID
     */
    public Integer getPlatformid() {
        return platformid;
    }


    /**
     * 设置：
     */
    public void setAn(String an) {
        this.an = an;
    }

    /**
     * 获取：
     */
    public String getAn() {
        return an;
    }


    /**
     * 设置：
     */
    public void setTi(String ti) {
        this.ti = ti;
    }

    /**
     * 获取：
     */
    public String getTi() {
        return ti;
    }


    /**
     * 设置：
     */
    public void setClazz(Integer clazz) {
        this.clazz = clazz;
    }

    /**
     * 获取：
     */
    public Integer getClazz() {
        return clazz;
    }


    /**
     * 设置：
     */
    public void setLsnt(String lsnt) {
        this.lsnt = lsnt;
    }

    /**
     * 获取：
     */
    public String getLsnt() {
        return lsnt;
    }


    /**
     * 设置：
     */
    public void setAd(String ad) {
        this.ad = ad;
    }

    /**
     * 获取：
     */
    public String getAd() {
        return ad;
    }


    /**
     * 设置：
     */
    public void setApd(String apd) {
        this.apd = apd;
    }

    /**
     * 获取：
     */
    public String getApd() {
        if (StringUtils.isBlank(apd)) {
            return null;
        }
//        if (apd.trim().length() == 0) {
//            return null;
//        }
        return apd;
    }


    /**
     * 设置：
     */
    public void setPd(String pd) {
        this.pd = pd;
    }

    /**
     * 获取：
     */
    public String getPd() {
        if (StringUtils.isBlank(pd)) {
            return null;
        }
//        if (pd.trim().length() == 0) {
//            return null;
//        }
        return pd;
    }


    /**
     * 设置：
     */
    public void setIvd(Object ivd) {
        this.ivd = ivd;
    }

    /**
     * 获取：
     */
    public String getIvd() {
        return objectHandle(this.ivd);
    }


    /**
     * 设置：
     */
    public void setIn1(String in1) {
        this.in1 = in1;
    }

    /**
     * 获取：
     */
    public String getIn1() {
        return in1;
    }

    /**
     * 设置：
     */
    public void setPa1(String pa1) {
        this.pa1 = pa1;
    }

    /**
     * 获取：
     */
    public String getPa1() {
        return pa1;
    }

    /**
     * 设置：
     */
    public void setCpa1(String cpa1) {
        this.cpa1 = cpa1;
    }

    /**
     * 获取：
     */
    public String getCpa1() {
        return cpa1;
    }

    /**
     * 设置：
     */
    public void setPpa1(String ppa1) {
        this.ppa1 = ppa1;
    }

    /**
     * 获取：
     */
    public String getPpa1() {
        //如果为空，则默认设置暂未公开
        if (StringUtils.isBlank(ppa1)) {
            return "暂未公开";
        }
        return ppa1;
    }

    /**
     * 设置：
     */
    public void setPaa(String paa) {
        this.paa = paa;
    }

    /**
     * 获取：
     */
    public String getPaa() {
        return paa;
    }

    /**
     * 设置：
     */
    public void setAa(String aa) {
        this.aa = aa;
    }

    /**
     * 获取：
     */
    public String getAa() {
        return aa;
    }

    /**
     * 设置：
     */
    public void setCaa(String caa) {
        this.caa = caa;
    }

    /**
     * 获取：
     */
    public String getCaa() {
        return caa;
    }

    /**
     * 设置：
     */
    public void setTfd(Object tfd) {
        this.tfd = tfd;
    }

    /**
     * 获取：
     */
    public String getTfd() {
        return objectHandle(tfd);
    }


    /**
     * 设置：
     */
    public void setSed(String sed) {
        this.sed = sed;
    }

    /**
     * 获取：
     */
    public String getSed() {
        if (StringUtils.isBlank(sed)) {
            return null;
        }
        return sed;
    }


    /**
     * 设置：
     */
    public void setIc1(String ic1) {
        this.ic1 = ic1;
    }

    /**
     * 获取：
     */
    public String getIc1() {
        return ic1;
    }


    /**
     * 设置：
     */
    public void setLsn2(String lsn2) {
        this.lsn2 = lsn2;
    }

    /**
     * 获取：
     */
    public String getLsn2() {
        return lsn2;
    }


    public String getCagc() {
        return cagc;
    }

    public void setCagc(String cagc) {
        this.cagc = cagc;
    }

//以下为扩展

    /**
     * 获取：法律状态
     */
    public Integer getLawstate() {
        return CloudUtils.getPatentHubPatentType(lsnt);
    }

    /**
     * 获取：当前权力人类型
     */
    public Integer getApplyPersonType() {
        if (cpa1.trim().length() == 0)
            return 0;
        return CloudUtils.applyPersonType(GetPatenteeType.findType(cpa1));
    }

    /**
     * 获取：变更前权力人类型
     */
    public Integer getApplyPersonTypePrevious() {
        if (StringUtils.isBlank(ppa1)) {
            //如果变更前权利人为空，则设置为其他
            return 3;
        }
        if (ppa1.trim().length() == 0)
            return 0;
        return CloudUtils.applyPersonType(GetPatenteeType.findType(ppa1));
    }

//    /**
//     * 获取：国民经济分类
//     */
//    public String getChinaIPCID() {
//
//        return "";
//    }

    /**
     * 获取：是否转入
     */
    public boolean getIsRollIn() {
        //转入前地址不为空，并且转入地址和当前地址不能相同
        //return StringUtils.isNotBlank(pdn) && pdn.equalsIgnoreCase(cdn) == false;
        // 因为有可能出现一种情况，一个权利人，变为多个，其中有一个权力是一样的，所以 如果有pdn 我们就认为这是权力转移了
        return StringUtils.isNotBlank(pdn);
    }


    private String objectHandle(Object obj) {
        if (obj == null) {
            return null;
        }
        if (tfd instanceof List) {
            if (((List) tfd).size() > 0) {
                return ((List) tfd).get(0).toString();
            } else {
                return null;
            }
        }
        String str = String.valueOf(obj);
        if (StringUtils.isBlank(str)) {
            return null;
        }
        if (str.indexOf(";") != -1) {
            return str.split(";")[0];
        } else {
            return str;
        }
    }

    public String getCdn() {
        return cdn;
    }

    public void setCdn(String cdn) {
        this.cdn = cdn;
    }

    public String getPdn() {
        return pdn;
    }

    public void setPdn(String pdn) {
        this.pdn = pdn;
    }

    public static long getSerialVersionUID() {
        return serialVersionUID;
    }

    public String getPatentTypeName() {
        return patentTypeName;
    }

    public void setPatentTypeName(String patentTypeName) {
        this.patentTypeName = patentTypeName;
    }
}
